package 力扣日常刷题.木22一月.第05天0112;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 帅小伙
 * @date 2022/1/12
 * @description
 */
public class Demo07回溯中等循环码排列 {


    public List<Integer> circularPermutation(int n, int start) {
        ArrayList<Integer> res = new ArrayList<>();
        res.add(0);

        if (n == 0) {
            return res;
        }

        int c = 1;
        while (c <= n) {
            int index = res.size()-1;

            while (index >= 0) {
                res.add(res.get(index--) + (int) Math.pow(2, c - 1));
            }
            c++;
        }

        int index = -1;
        for (int i = 0; i < res.size(); i++) {
            if(res.get(i) == start){
                index = start;
                break;
            }
        }
        ArrayList<Integer> ans = new ArrayList<>();
        for (int i = 0; i < res.size(); i++) {
            ans.add(res.get((i+index)%res.size()));
        }
        return ans;

    }


}
